package com.dd.cloud.user.service.doctor;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.dd.cloud.common.vo.LoginInfo;
import com.dd.cloud.common.vo.PageReq;
import com.dd.cloud.user.entity.doctor.PatientMedCard;
import com.dd.cloud.user.req.aicms.AskDoctorParamsReq;
import com.dd.cloud.user.req.doctor.*;
import com.dd.cloud.user.req.pres.PresPatientAddrReq;
import com.dd.cloud.user.req.pres.PresPatientReq;
import com.dd.cloud.user.res.doctor.*;

import javax.servlet.http.HttpServletResponse;
import java.util.List;

/**
 * <p>
 * 患者详细信息表 服务类
 * </p>
 *
 * @author czg
 * @since 2022-04-27
 */
public interface IPatientMedCardService extends IService<PatientMedCard> {
    /**
     * 添加患者病历卡信息
     *
     * @param req
     * @return
     */
    PatientMedCard addPatientMedCard(PatientMedCardCreateReq req);

    /**
     * 添加患者病历卡信息
     *
     * @param req
     */
    void addPatientMedCardH5(PatientMedCardH5CreateReq req);

    /**
     * 修改就诊卡
     *
     * @param req
     * @return
     */
    void updateMedCard(PatientMedCardUpdateReq req);

    /**
     * 修改就诊卡状态
     *
     * @param id
     * @param status
     * @return
     */
    void updateMedCardStatus(Integer id, Integer status);

    /**
     * 查询患者信息
     *
     * @param medId
     * @return
     */
    PatientMedCardDetailRes queryPatientMedCardDetail(String medId);

    /**
     * 检查患者信息是否存在 存在返回信息
     *
     * @param req
     * @return
     */
    PatientMedCardDetailH5Res queryPatientMedCardDetailH5(PatientMedCardDetailH5Req req);

    /**
     * 分页查询患者病历卡信息
     *
     * @param req
     * @return
     */
    IPage<PatientMedCardPageRes> selPatientMedCard(ParamsMedCardReq req);

    /**
     * 分页查询患者病历卡信息
     *
     * @param req
     * @return
     */
    IPage<PatientMedCardMobPageRes> selPatientMedCardMobPage(ParamsMedCardMobPageReq req);

    /**
     * 列表查询患者病历卡信息
     *
     * @param req
     * @return
     */
    List<PatientMedCardListRes> selPatientMedCardList(ParamsMedCardListReq req);

    /**
     * 就诊卡查询机构
     *
     * @param medId
     * @return
     */
    List<MedMechanListRes> getMedMechanList(String medId);

    /**
     * 查询医生邀请的患者名单
     *
     * @param req
     * @return
     */
    IPage<DoctorInvitePatientPageRes> queryDoctorInvitePatientPageRes(PageReq req);

    /**
     * 查询患者列表 运营后台 分页
     *
     * @param req
     * @return
     */
    IPage<PatientMedCardPageAdminRes> queryPatientMedCardPageAdmin(PatientMedCardPageAdminReq req);

    /**
     * 查询患者列表 运营后台 导出excel
     *
     * @param req
     */
    void exportPatientMedCardPageAdmin(PatientMedCardPageAdminReq req, HttpServletResponse response);

    /**
     * 智能开方添加或修改就诊卡信息
     *
     * @param req
     */
    void aicmsSaveOrUpdateMedCard(AskDoctorParamsReq req);

    /**
     * 开处方生成患者信息
     *
     * @param patientReq
     * @param addrReq
     * @param loginInfo
     * @return
     */
    PatientMedCard addPresGeneratePatientInfo(PresPatientReq patientReq, PresPatientAddrReq addrReq, LoginInfo loginInfo);
}
